<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/4/3 0003
 * Time: 00:55
 */
//echo __DIR__;die;
$size_x = 200;
$size_y = 75;
$code = 'unknown';
$space_per_char = $size_x / (strlen($code) + 1);

$img = imagecreatetruecolor($size_x, $size_y); //创建一个画布

//imagecreate() //用来创建最大值是256的调色板图片  imagecreatetruecolor用的更广泛一些 JPEG和PNG的文件都支持真色彩图片 使用这个函数生成PNG图片 默认背景色是黑色 因为想要更换背景颜色
//所以要分配一些颜色 如下
$background = imagecolorallocate($img, 255, 255, 255);
$border = imagecolorallocate($img, 128, 128, 128); //红 绿 蓝
$colors[] = imagecolorallocate($img, 128, 64, 192);
$colors[] = imagecolorallocate($img, 192, 64, 128);
$colors[] = imagecolorallocate($img, 108, 192, 64);

//imagecolorallocate函数定义5种不同的颜色
//$colors 数组包含了3个颜色渲染文字

//填充背景
//function imagefilledrectangle ($image, $x1, $y1, $x2, $y2, $color) {}
imagefilledrectangle($img, 1, 1, $size_x - 2, $size_y - 2, $background);//填充背景色为白色
imagerectangle($img, 0, 0, $size_x - 1, $size_y - 1, $border);//设置边框为灰色
// (图片资源 , 走上角的坐标.右下角的坐标和颜色,坐标的范围从0,0到$size_x-1,$size_y-1 所以我们从位置1,1到$size_x - 2, $size_y - 2绘制一个长方形 我们还在图片的边缘 绘制一个灰色的边框)

//绘制文本
$length = strlen($code);
//循环遍历代码字符串所有字母 使用 模运算保证获取元素的键值包含在数组中 使用imagettftext来绘制字母
for ($i = 0; $i < $length; $i++) {
    $color = $colors[$i % count($colors)];
//    function imagettftext ($image, $size, $angle, $x, $y, $color, $fontfile, $text) {}

    //(图片资源,绘制的字符点数大小(不是像素)加上随机值,绘制字符的角度(范围是0-360)使用它来稍微扭曲字符,绘制字符x位置这里也加上了随机值,字符y轴的位置,绘制字符文本的颜色,使用的自提文件的名字,代码中绘制的字符)
    imagettftext($img,
        28 + rand(0, 8),
        -20 + rand(0, 40),
        ($i + 0.3) * $space_per_char,
        50 + rand(0, 10),
        $color,
        __DIR__ . '\arial.ttf',
        $code{$i}
    );
}
//增加一些随机的变形处理
imageantialias($img, true);
//header('Content-type: image/png');
header('Content-type: image/jpeg ');
//header('Content-Type: application/octet-stream');
//header('Content-Type:application/zip');
//header('Content-Length: ' . filesize($img));
//imagepng($img);
imagejpeg($img);
//imagewbmp($img);


